Learn in 10 minutes

Learn in 10 minutes

10분 안에 Perl 배우기

Programming Language

Perl은 텍스트 처리 능력과 유연성으로 유명한 강력한 고수준 프로그래밍 언어입니다. 원래 시스템 관리 작업을 위해 개발되었지만, Perl은 웹 개발, 네트워크 프로그래밍 등 다양한 용도로 사용되는 다재다능한 언어로 발전했습니다. 이 튜토리얼은 Perl의 핵심 개념을 다루어 언어를 빠르게 배울 수 있도록 도와줍니다.

1. 첫 번째 Perl 프로그램 작성하기

간단한 프로그램부터 시작해보겠습니다. hello.pl이라는 파일을 생성하고 다음 코드를 입력하세요:

#!/usr/bin/perl
print "Hello, World!\n";

파일을 저장하고 터미널에서 다음 명령을 실행하세요:

perl hello.pl

출력 결과는 다음과 같습니다:

Hello, World!

이 간단한 프로그램은 Perl의 기본 출력 기능을 보여줍니다. print 함수는 콘솔에 텍스트 정보를 표시하는 데 사용됩니다.

2. 기본 문법

Perl의 문법은 유연하고 표현력이 뛰어나며, 몇 가지 독특한 특징을 가지고 있습니다.

# 이것은 주석입니다
print "Hello, World!\n";

Perl의 기본 문법 규칙:

  • 주석: 한 줄 주석은 #으로 시작
  • 문장: 세미콜론 ;으로 끝남
  • Shebang 라인: 스크립트 파일 상단에 #!/usr/bin/perl
  • 변수: 변수 타입을 나타내는 특수 문자 사용 ($, @, %)
  • 문자열 따옴표: 작은따옴표 ' 또는 큰따옴표 " 사용 가능

3. 변수와 데이터 타입

Perl에서 변수는 동적으로 타입이 결정되며, 타입을 나타내는 특수 문자를 사용합니다.

스칼라 변수 (단일 값):

$name = "Alice";
$age = 25;
$temperature = 36.5;
$is_active = 1;  # 참은 1, 거짓은 빈 문자열

배열 변수 (순서가 있는 목록):

@fruits = ("apple", "banana", "cherry");
@numbers = (1, 2, 3, 4, 5);

해시 변수 (키-값 쌍):

%person = (
    "name" => "John",
    "age" => 30,
    "city" => "New York"
);

3.1 스칼라 변수

스칼라는 문자열, 숫자, 참조와 같은 단일 값을 저장합니다.

# 문자열 연산
$text = "Perl Programming";
print length($text);        # 문자열 길이
print uc($text);            # 대문자로 변환
print lc($text);            # 소문자로 변환
print substr($text, 0, 4);  # 부분 문자열 추출

# 숫자 연산
$x = 10;
$y = 3;
print $x + $y;    # 13
print $x - $y;    # 7
print $x * $y;    # 30
print $x / $y;    # 3.333...
print $x % $y;    # 1 (모듈로)

3.2 배열 변수

배열은 여러 값을 저장할 수 있는 순서가 있는 컬렉션입니다.

@colors = ("red", "green", "blue");

# 배열 요소 접근
print $colors[0];     # "red" (단일 요소는 $ 사용)
print $colors[1];     # "green"
print $colors[-1];    # "blue" (마지막 요소)

# 배열 연산
push(@colors, "yellow");     # 끝에 추가
pop(@colors);                # 끝에서 제거
shift(@colors);              # 시작에서 제거
unshift(@colors, "purple");  # 시작에 추가

# 배열 함수
print scalar(@colors);       # 요소 개수
print $#colors;              # 마지막 인덱스

3.3 해시 변수

해시는 키-값 쌍의 컬렉션입니다.

%student = (
    name => "Alice",
    age => 20,
    major => "Computer Science"
);

# 해시 요소 접근
print $student{"name"};     # "Alice"
print $student{age};        # 20

# 해시 연산
$student{"gpa"} = 3.8;     # 새로운 키-값 쌍 추가
delete $student{"age"};    # 키-값 쌍 제거

# 해시 함수
@keys = keys %student;      # 모든 키 가져오기
@values = values %student;  # 모든 값 가져오기

4. 제어 흐름

Perl은 프로그램 실행을 관리하기 위한 여러 제어 흐름 문을 제공합니다.

4.1 if 문

if 문은 조건을 평가하고 조건이 참일 때 블록을 실행합니다.

$age = 20;
if ($age >= 18) {
    print "성인\n";
} elsif ($age >= 13) {
    print "청소년\n";
} else {
    print "어린이\n";
}

# 한 줄 if
print "성인\n" if $age >= 18;

4.2 unless 문

unlessif의 반대입니다 - 조건이 거짓일 때 실행됩니다.

$age = 15;
unless ($age >= 18) {
    print "성인이 아님\n";
}

# 한 줄 unless
print "성인이 아님\n" unless $age >= 18;

4.3 반복문

Perl은 다양한 반복문 구문을 지원합니다.

while 루프:

$count = 0;
while ($count < 5) {
    print "카운트: $count\n";
    $count++;
}

for 루프:

for ($i = 0; $i < 5; $i++) {
    print "i = $i\n";
}

foreach 루프:

@fruits = ("apple", "banana", "cherry");
foreach $fruit (@fruits) {
    print "과일: $fruit\n";
}

# 기본 변수 $_ 사용
foreach (@fruits) {
    print "과일: $_\n";
}

last와 next:

foreach (1..10) {
    last if $_ == 5;     # 루프 종료
    next if $_ % 2 == 0; # 짝수 건너뛰기
    print "$_\n";        # 출력: 1, 3
}

5. 서브루틴

Perl의 서브루틴은 sub 키워드를 사용하여 정의합니다.

기본 서브루틴 정의:

sub greet {
    my $name = shift;
    return "Hello, $name!";
}

# 서브루틴 호출
$message = greet("John");
print $message;

매개변수 사용:

sub add_numbers {
    my ($a, $b) = @_;
    return $a + $b;
}

$result = add_numbers(5, 3);
print "합계: $result\n";

기본 매개변수:

sub greet {
    my ($name, $greeting) = @_;
    $greeting = "Hello" unless defined $greeting;
    return "$greeting, $name!";
}

print greet("Alice");          # "Hello, Alice!"
print greet("Bob", "Hi");      # "Hi, Bob!"

6. 정규 표현식

Perl은 강력한 정규 표현식 기능으로 유명합니다.

기본 패턴 매칭:

$text = "Hello, World!";

if ($text =~ /Hello/) {
    print "'Hello'를 찾았습니다\n";
}

# 대소문자 구분 없는 매칭
if ($text =~ /world/i) {
    print "'world'를 찾았습니다 (대소문자 구분 없음)\n";
}

치환:

$text = "I like cats and cats are cute";
$text =~ s/cats/dogs/g;  # 모든 발생 항목 교체
print "$text\n";         # "I like dogs and dogs are cute"

매칭 추출:

$email = "[email protected]";
if ($email =~ /(\w+)@(\w+\.\w+)/) {
    print "사용자명: $1\n";      # "user"
    print "도메인: $2\n";        # "example.com"
}

7. 파일 작업

Perl은 파일 읽기와 쓰기를 위한 간단한 방법을 제공합니다.

파일 읽기:

# 전체 파일 읽기
open(my $fh, '<', 'example.txt') or die "파일을 열 수 없습니다: $!";
my $content = do { local $/; <$fh> };
close($fh);
print $content;

# 한 줄씩 읽기
open(my $fh, '<', 'example.txt') or die "파일을 열 수 없습니다: $!";
while (my $line = <$fh>) {
    print $line;
}
close($fh);

파일 쓰기:

# 파일에 쓰기
open(my $fh, '>', 'output.txt') or die "파일을 열 수 없습니다: $!";
print $fh "Hello, Perl!\n";
close($fh);

# 파일에 추가하기
open(my $fh, '>>', 'output.txt') or die "파일을 열 수 없습니다: $!";
print $fh "새로운 내용을 추가합니다.\n";
close($fh);

8. 내장 함수

Perl은 많은 유용한 내장 함수를 제공합니다.

문자열 함수:

$text = "  Perl Programming  ";
print length($text);        # 문자열 길이
print uc($text);            # 대문자로 변환
print lc($text);            # 소문자로 변환
print substr($text, 0, 4);  # 부분 문자열 추출
print index($text, "Prog"); # 부분 문자열 위치 찾기

배열 함수:

@numbers = (3, 1, 4, 1, 5, 9, 2);
print join(", ", sort @numbers);      # "1, 1, 2, 3, 4, 5, 9"
print join(", ", reverse @numbers);   # "2, 9, 5, 1, 4, 1, 3"

# 배열 필터링
@filtered = grep { $_ > 3 } @numbers;
print join(", ", @filtered);          # "4, 5, 9"

# 배열 변환
@doubled = map { $_ * 2 } @numbers;
print join(", ", @doubled);           # "6, 2, 8, 2, 10, 18, 4"

해시 함수:

%person = (name => "Alice", age => 25, city => "New York");
@keys = keys %person;      # 모든 키 가져오기
@values = values %person;  # 모든 값 가져오기

# 키 존재 여부 확인
if (exists $person{age}) {
    print "나이가 존재합니다\n";
}

9. Perl 모듈

Perl은 CPAN을 통해 사용 가능한 풍부한 모듈 생태계를 가지고 있습니다.

코어 모듈 사용:

use strict;
use warnings;
use Data::Dumper;

%data = (name => "Bob", age => 30);
print Dumper(\%data);  # 데이터 구조 예쁘게 출력

CPAN 모듈 설치 및 사용:

# CPAN에서 모듈 설치
cpan install JSON
use JSON;

# JSON 파싱
$json_string = '{"name": "Alice", "age": 25}';
$person = decode_json($json_string);
print $person->{name};  # "Alice"

# JSON 생성
$person_hash = { name => "Bob", age => 30 };
$json_output = encode_json($person_hash);
print $json_output;  # {"name":"Bob","age":30}

10. Perl 스타일 가이드

Perl은 깨끗하고 읽기 쉬운 코드를 장려하는 커뮤니티 규칙을 가지고 있습니다.

들여쓰기: 들여쓰기에 4개의 공백을 사용하세요.

변수 이름 지정:

  • 설명적인 이름 사용
  • snake_case 규칙 따르기
  • 의미 있는 변수 이름 사용

코드 구성:

  • 스크립트 상단에 use strict;use warnings; 사용
  • my로 변수 선언하여 범위 제한
  • 의미 있는 서브루틴 이름 사용

문서화:

  • 코드 문서화를 위해 POD (Plain Old Documentation) 사용
  • 복잡한 로직에 주석 포함

Perl의 유연성과 강력한 텍스트 처리 능력은 시스템 관리, 웹 개발, 데이터 처리 작업에 탁월한 선택입니다. 풍부한 모듈 생태계와 강력한 커뮤니티 지원은 현대 프로그래밍 환경에서도 계속해서 관련성을 유지하고 있습니다.